"""
re模块的使用
"""

import re

re.findall(
    r"\d+", "12a34b56", flags=re.DOTALL
)  # ['12', '34', '56'] 第一个参数是正则表达式，第二个参数是被搜索的字符串。flags参数用于设置正则表达式的模式。re.DOTALL表示匹配模式为“点任意匹配”模式，即匹配所有字符，包括换行符。

# 匹配手机号
phone_num = "13812345678 158123456786666 18812345678\n13912345678\n15912345678\n18912345678\n13612345678\n15612345678\n18612345678"
print(re.findall(r"1[345678]\d{9}\b", phone_num))

print(
    re.search(r"\d+", "12a34b56", flags=re.DOTALL)
)  # <re.Match object; span=(0, 3), match='12'> 第一个参数是正则表达式，第二个参数是被搜索的字符串。flags参数用于设置正则表达式的模式。re.DOTALL表示匹配模式为“点任意匹配”模式，即匹配所有字符，包括换行符。search()方法只返回第一个匹配的结果。返回的是一个Match对象，包含匹配的字符串、开始位置和结束位置。

re.finditer(
    r"\d+", "12a34b56", flags=re.DOTALL
)  # <callable-iterator object at 0x000001> 第一个参数是正则表达式，第二个参数是被搜索的字符串。flags参数用于设置正则表达式的模式。re.DOTALL表示匹配模式为“点任意匹配”模式，即匹配所有字符，包括换行符。finditer()方法返回一个迭代器，可以遍历所有匹配的结果。返回的是一个callable-iterator对象，可以用for循环来遍历。

re.sub(
    r"\d+", "888", "12a34b56", flags=re.DOTALL
)  # '888a888b888' 第一个参数是正则表达式，第二个参数是替换字符串，第三个参数是被搜索的字符串。flags参数用于设置正则表达式的模式。re.DOTALL表示匹配模式为“点任意匹配”模式，即匹配所有字符，包括换行符。sub()方法用于替换匹配的字符串。

re.split(
    r"\d+", "12a34b56", flags=re.DOTALL
)  # ['', 'a', 'b', ''] 第一个参数是正则表达式，第二个参数是被搜索的字符串。flags参数用于设置正则表达式的模式。re.DOTALL表示匹配模式为“点任意匹配”模式，即匹配所有字符，包括换行符。split()方法用于分割字符串。

re.compile(r"\d+").findall(
    "12a34b56", flags=re.DOTALL
)  # ['12', '34', '56'] 第一个参数是正则表达式，第二个参数是被搜索的字符串。flags参数用于设置正则表达式的模式。re.DOTALL表示匹配模式为“点任意匹配”模式，即匹配所有字符，包括换行符。compile()方法用于编译正则表达式，并返回一个正则表达式对象。findall()方法用于查找所有匹配的字符串。
